package com.zyzo.demo.appengine.client.Json2Model;

import java.util.Date;

import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.zyzo.demo.appengine.model.Item;
import com.zyzo.demo.appengine.model.ServerReponse;
import com.zyzo.demo.appengine.model.User;

public class Converter 
{
	
	private static Converter _instance=null ;
	protected Converter()
	{
		 
	}
	public static Converter getInstance()
	{
		if(null==Converter._instance)Converter._instance = new Converter();
		return Converter._instance;
	}

	
	public User jsonToUser(  JSONObject json)
	{
		User u = new User();
		for (String key : json.keySet()) 
        {
			if		( "id".equals(key) 				&& json.get(key).isNumber()!=null){ u.setId( (long) json.get(key).isNumber().doubleValue() );}
			else if ( "password".equals(key) 		&& json.get(key).isString()!=null){ u.setPassword( json.get(key).isString().stringValue() ); }/* string = string.substring(1, string.length()-1); */
			else if ( "firstname".equals(key) 		&& json.get(key).isString()!=null){ u.setFirstname( json.get(key).isString().stringValue() ); }
			else if ( "lastname".equals(key)		&& json.get(key).isString()!=null){ u.setLastname( json.get(key).isString().stringValue() ); }
			else if ( "email".equals(key) 			&& json.get(key).isString()!=null){ u.setEmail( json.get(key).isString().stringValue() ); }
			else if ( "phone".equals(key) 			&& json.get(key).isString()!=null){ u.setPhone(json.get(key).isString().stringValue() ); }
			else if ( "subscriptionDate".equals(key)&& json.get(key).isNumber()!=null){ long time = (long) json.get(key).isNumber().doubleValue()  ;u.setSubscriptionDate( new Date(time) ); }
        }
		return u;
	}
	public JSONObject userToJson(  User u )
	{
		JSONObject jsonValue = new JSONObject();
		
		if(u.getId()!=null) jsonValue.put("id", new JSONNumber( u.getId(  ) ) );
		if(u.getPassword()!=null) jsonValue.put("password", new JSONString( u.getPassword(  ) ) );
		if(u.getFirstname()!=null) jsonValue.put("firstname", new JSONString( u.getFirstname(   ) ) );
		if(u.getLastname()!=null) jsonValue.put("lastname", new JSONString( u.getLastname(  ) ) );
		if(u.getEmail()!=null) jsonValue.put("email", new JSONString( u.getEmail(   ) ) ); 
		if(u.getPhone()!=null) jsonValue.put("phone", new JSONString( u.getPhone( ) ) );
		if(u.getSubscriptionDate()!=null) jsonValue.put("subscriptionDate",   new JSONNumber( u.getSubscriptionDate().getTime() )  );
		
		
		return jsonValue;
	}
	
	
	
	public Item jsonToItem(  JSONObject json)
	{
		Item o = new Item();
		for (String key : json.keySet()) 
        {
			if		( "id".equals(key) ){ o.setId( (long) json.get(key).isNumber().doubleValue() );}
			else if ( "description".equals(key) ){ o.setDescription( json.get(key).toString() ); }
			else if ( "name".equals(key) ){ o.setName( json.get(key).toString() ); }
			else if ( "price".equals(key) ){ o.setPrice( (float) json.get(key).isNumber().doubleValue()  ); }
        }
		return o;
	}
	
	
	
	public ServerReponse jsonToServerReponse(  JSONObject json)
	{
		int s= 0;
		String m = null;
		for (String key : json.keySet()) 
        {
			if		( "status".equals(key) ){ s = ( (int) json.get(key).isNumber().doubleValue() );}
			else if ( "message".equals(key) ){ m = ( json.get(key).toString() ); }
        }
		
		ServerReponse o = new ServerReponse(s,m);
		return o;
	}
}
